package com.vca.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.vca.common.model.user.User;
import com.vca.common.request.*;
import com.vca.common.response.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author chenbing
 * @date 2022/10/8   15:11
 */
public interface UserService extends IService<User> {


    /**
     * 用户信息
     * @return
     */
    UserInfoResponse getUserCenter(String language);

    /**
     * 修改个人资料
     * @param request 修改信息
     */
    Boolean editUser(UserEditRequest request);

    /**
     * 用户二维码
     * @return
     */
    Map<String,String> getQrcode();

    /**
     * 我的预约课程
     * @param mainType
     * @param
     */
    PageInfo<MyAppointmentItemResponse> getAppointment(String language,PageParamRequest pageParamRequest,Integer mainType);

    /**
     * 我的礼品卡
     */
    PageInfo<GiftCardResponse> getCard(String language,String preOrderNo, PageParamRequest pageParamRequest);

    GiftCardInfoResponse getCardInfo(String language,Integer id);

    /**
     * 我的收藏
     */
    PageInfo<CollectionsResponse> getCollections(String language,PageParamRequest pageParamRequest);
    /**
    * @Description:根据手机号查询用户
    * @Author: chenBing
    * @Date: 2022/10/8
    */
    User getByPhone(String phone);

    /**
    * @Description:通过微信信息注册用户
    * @Author: chenBing
    * @Date: 2022/10/8
    */
    User registerByThird(RegisterThirdUserRequest registerThirdUserRequest);

    /**
    * @Description:获取个人资料
    * @Author: chenBing
    * @Date: 2022/10/8
    */
    User getInfoException();

    User getInfo();

    Integer getUserId();

    /**
    * @Description:根据用户id获取用户列表 map模式
    * @Author: chenBing
    * @Date: 2022/10/8
    */
    HashMap<Integer, User> getMapListInUid(List<Integer> userIds);

    /**
     * 清除User Group id
     * @param groupId 待清除的GroupId
     */
    void clearGroupByGroupId(String groupId);

    /**
     * 用户分页列表
     * @param request 查询参数
     * @param pageParamRequest 分页参数
     * @return PageInfo
     */
    PageInfo<UserResponse> getList(UserSearchRequest request, PageParamRequest pageParamRequest);

    /**
     * 用户分页列表
     * @param request 查询参数
     * @return PageInfo
     */
    List<User> getList(UserSearchRequest request);

    /**
     * 更新用户
     * @param userRequest 用户参数
     */
    Boolean updateUser(UserUpdateRequest userRequest);

    /**
     * 后台修改用户手机号
     * @param id 用户uid
     * @param phone 手机号
     * @return Boolean
     */
    Boolean updateUserPhone(Integer id, String phone);
    /**
     * 获取用户详情
     * @param id 用户uid
     */
    User getInfoByUid(Integer id);
    /**
     * 操作积分、余额
     */
    Boolean updateIntegralMoney(UserOperateIntegralMoneyRequest request);

    /**
     * 添加/扣减余额
     *
     * @param uid      用户id
     * @param price    金额
     * @param nowMoney 历史金额
     * @param type     类型：add—添加，sub—扣减
     */
    Boolean operationNowMoney(Integer uid, BigDecimal price, BigDecimal nowMoney, String type);

    Boolean operationIntegral(Integer uid, Integer integral, Integer integral1, String add);

    List<Integer> findIdListLikeName(String keywords);

    Integer getUserIdException();

    String getValidateCodeRedisKey(String phone);

    /**
     * 添加内部员工
     * @param request
     * @return 成功 失败
     * @author Li
     * @date 2022/11/09 11:08
     */
    boolean addInternalUser(UserAddInternalRequest request);

    /**
     * 修改用户邮箱
     * @param id 用户uid
     * @param email 手机号
     * @author Li
     * @date 2022/11/09 13:13
     */
    boolean updateUserEmail(Integer id, String email);


    /**
     * 获取用户的消费记录
     * @param id
     * @return
     * @author Li
     * @date 2022/11/09 13:16
     */
    PageInfo getExpenseCalendar(Integer id, PageParamRequest pageParamRequest);

    /**
     * 获取用户总订单详情
     * @param id
     * @return
     * @author Li
     * @date 2022/11/09 16:32
     */
    Map<String, Object> getUserOrderInfo(Integer id);

    /**
     *@Description:礼品卡接受赠送
     *@author:chenbing
     *@date 2022/12/1 19:44
     */
    boolean getCardToSend(Integer sendUser, String cardNo);

    /**
     *@Description:获取相应的礼品卡
     *@author:chenbing
     *@date 2022/12/21 14:50
     */
    PageInfo<GiftCardResponse> getCardList(Long mainId, Integer type, PageParamRequest pageParamRequest);

    /**
     *@Description:礼品卡领取页详情
     *@author:chenbing
     *@date 2023/6/27 9:27
     */
    HashMap<String,Object> cardInfoClaim(String cardNo);

    /**
      * @Description:兑换礼品卡
      * @author:chenbing
      * @date 2023/9/26 10:24
    */
    boolean exchangeCard(String language,String cardKey);
}
